#include "gtest/gtest.h"

#include "FrameworkTest.hpp"

#include "DBManager/Database/DatabaseFactory.h"
#include "DBManager/DBServiceFactory.h"
#include "Utility/Stacktrace/SGSignal.h"

using namespace SG::DBManager;

std::shared_ptr<DBServiceFactory> DB_SERVICEFACTORY = nullptr;
DatabaseFactory*  DBFactory      = nullptr;

class H5DBEnvironment : public testing::Environment
{
  public:
    virtual void SetUp () override
    {
        // 数据库工厂
        DBFactory = new DatabaseFactory ();
        // 数据库
        IDatabase* db = DBFactory->GetDatabase (DatabaseFactory::HDF5, ".", "ElementUnitTest.db");
        // 根据数据库创建Service管理器
        DB_SERVICEFACTORY = std::make_shared< DBServiceFactory> (db);
    }
    virtual void TearDown () override
    {
        // 释放数据库资源
        DB_SERVICEFACTORY.reset();
        delete DBFactory;
    }
};

int main (int argc, char *argv[])
{
    SG::Utility::SGSignal::registerSignalHandlers ();
    testing::AddGlobalTestEnvironment (new H5DBEnvironment ());
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}